home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 51 / Amiga Format CD51 (2000-03-10)(Future Publishing)(GB)[!][issue 2000-04].iso / -in_the_mag- / workbench / term_4.8 / extras / source / term-source.lha / ScreenPanel.c < prev    next >
C/C++ Source or Header  |  1997-10-13  |  34KB  |  1,331 lines

  1. /*
  2. **    ScreenPanel.c
  3. **
  4. **    Editing panel for screen configuration
  5. **
  6. **    Copyright © 1990-1997 by Olaf `Olsen' Barthel
  7. **        All Rights Reserved
  8. **
  9. **    :ts=4
  10. */
  11.  
  12. #ifndef _GLOBAL_H
  13. #include "Global.h"
  14. #endif
  15.  
  16. enum    {    GAD_SCREENMODE=1000,GAD_USE_PUBSCREEN,GAD_PUBSCREENNAME,GAD_FONT,
  17.             GAD_COLOURMODE,GAD_SCREENTITLE,GAD_MAKESCREENPUBLIC,
  18.             GAD_BLINKING,GAD_PALETTE,GAD_RED,GAD_GREEN,GAD_BLUE,GAD_RESET,
  19.             GAD_STDPENS,GAD_EDITPENS,GAD_WINDOW_BORDER,GAD_SPLIT_STATUS,
  20.             GAD_STATUS_LINE,GAD_PAGER,GAD_PAGEGROUP,GAD_SIMPLE_REFRESH,
  21.  
  22.             GAD_USE,GAD_CANCEL,GAD_DEFAULT
  23.         };
  24.  
  25.     /* CannotChangeColours(struct Configuration *LocalConfig,LONG OriginalColourMode):
  26.      *
  27.      *    This routine rolls the dice and determines whether the user should
  28.      *    be allowed to change the screen colours or rendering pens.
  29.      */
  30.  
  31. STATIC BOOL
  32. CannotChangeColours(struct Configuration *LocalConfig,LONG OriginalColourMode)
  33. {
  34.     if(LocalConfig->ScreenConfig->ColourMode == OriginalColourMode && !LocalConfig->ScreenConfig->UseWorkbench && LocalConfig->ScreenConfig->ColourMode == Config->ScreenConfig->ColourMode && Screen)
  35.     {
  36.         LONG ThisDepth,RequestedDepth;
  37.  
  38.         ThisDepth = GetBitMapDepth(Window->WScreen->RastPort.BitMap);
  39.  
  40.         switch(LocalConfig->ScreenConfig->ColourMode)
  41.         {
  42.             case COLOUR_AMIGA:
  43.  
  44.                 RequestedDepth = 2;
  45.                 break;
  46.  
  47.             case COLOUR_EIGHT:
  48.  
  49.                 RequestedDepth = 3;
  50.                 break;
  51.  
  52.             case COLOUR_SIXTEEN:
  53.  
  54.                 RequestedDepth = 4;
  55.                 break;
  56.  
  57.             case COLOUR_MONO:
  58.  
  59.                 RequestedDepth = 1;
  60.                 break;
  61.         }
  62.  
  63.         return((BOOL)(ThisDepth < RequestedDepth));
  64.     }
  65.     else
  66.         return(TRUE);
  67. }
  68.  
  69. STATIC BOOL
  70. ScreenPenPanel(struct Window *Window,UWORD *Array,UWORD *DefaultArray,LONG Depth)
  71. {
  72.     LayoutHandle *Handle;
  73.     UWORD PrivateArray[16];
  74.     BOOL Result;
  75.  
  76.     Result = FALSE;
  77.  
  78.     CopyMem(Array,PrivateArray,sizeof(PrivateArray));
  79.  
  80.     if(Handle = LT_CreateHandleTags(Window->WScreen,
  81.         LAHN_LocaleHook,    &LocaleHook,
  82.         LAHN_ExactClone,    TRUE,
  83.     TAG_DONE))
  84.     {
  85.         struct Window *PanelWindow;
  86.  
  87.         LT_New(Handle,
  88.             LA_Type,    VERTICAL_KIND,
  89.         TAG_DONE);
  90.         {
  91.             LT_New(Handle,
  92.                 LA_Type,    VERTICAL_KIND,
  93.                 LA_LabelID,    MSG_PENPANEL_DRAWING_PENS_TXT,
  94.             TAG_DONE);
  95.             {
  96.                 LT_New(Handle,
  97.                     LA_Type,    VERTICAL_KIND,
  98.                 TAG_DONE);
  99.                 {
  100.                     LT_New(Handle,
  101.                         LA_Type,            PALETTE_KIND,
  102.                         LA_LabelID,            MSG_PENPANEL_BACKGROUND_TXT,
  103.                         GTPA_Depth,            Depth,
  104.                         LAPA_SmallPalette,    TRUE,
  105.                         LA_UWORD,            &PrivateArray[BACKGROUNDPEN],
  106.                         LA_Chars,            15,
  107.                         LA_ID,                100 + BACKGROUNDPEN,
  108.                     TAG_DONE);
  109.  
  110.                     LT_New(Handle,
  111.                         LA_Type,            PALETTE_KIND,
  112.                         LA_LabelID,            MSG_PENPANEL_TEXT_TXT,
  113.                         GTPA_Depth,            Depth,
  114.                         LAPA_SmallPalette,    TRUE,
  115.                         LA_UWORD,            &PrivateArray[TEXTPEN],
  116.                         LA_ID,                100 + TEXTPEN,
  117.                     TAG_DONE);
  118.  
  119.                     LT_New(Handle,
  120.                         LA_Type,            PALETTE_KIND,
  121.                         LA_LabelID,            MSG_PENPANEL_IMPORTANT_TEXT_TXT,
  122.                         GTPA_Depth,            Depth,
  123.                         LAPA_SmallPalette,    TRUE,
  124.                         LA_UWORD,            &PrivateArray[HIGHLIGHTTEXTPEN],
  125.                         LA_ID,                100 + HIGHLIGHTTEXTPEN,
  126.                     TAG_DONE);
  127.  
  128.                     LT_New(Handle,
  129.                         LA_Type,            PALETTE_KIND,
  130.                         LA_LabelID,            MSG_PENPANEL_BRIGHT_EDGES_TXT,
  131.                         GTPA_Depth,            Depth,
  132.                         LAPA_SmallPalette,    TRUE,
  133.                         LA_UWORD,            &PrivateArray[SHINEPEN],
  134.                         LA_ID,                100 + SHINEPEN,
  135.                     TAG_DONE);
  136.  
  137.                     LT_New(Handle,
  138.                         LA_Type,            PALETTE_KIND,
  139.                         LA_LabelID,            MSG_PENPANEL_DARK_EDGES_TXT,
  140.                         GTPA_Depth,            Depth,
  141.                         LAPA_SmallPalette,    TRUE,
  142.                         LA_UWORD,            &PrivateArray[SHADOWPEN],
  143.                         LA_ID,                100 + SHADOWPEN,
  144.                     TAG_DONE);
  145.  
  146.                     LT_New(Handle,
  147.                         LA_Type,            PALETTE_KIND,
  148.                         LA_LabelID,            MSG_PENPANEL_FILLPEN_TXT,
  149.                         GTPA_Depth,            Depth,
  150.                         LAPA_SmallPalette,    TRUE,
  151.                         LA_UWORD,            &PrivateArray[FILLPEN],
  152.                         LA_ID,                100 + FILLPEN,
  153.                     TAG_DONE);
  154.  
  155.                     LT_New(Handle,
  156.                         LA_Type,            PALETTE_KIND,
  157.                         LA_LabelID,            MSG_PENPANEL_FILLTEXTPEN_TXT,
  158.                         GTPA_Depth,            Depth,
  159.                         LAPA_SmallPalette,    TRUE,
  160.                         LA_UWORD,            &PrivateArray[FILLTEXTPEN],
  161.                         LA_ID,                100 + FILLTEXTPEN,
  162.                     TAG_DONE);
  163.  
  164.                     LT_New(Handle,
  165.                         LA_Type,            PALETTE_KIND,
  166.                         LA_LabelID,            MSG_PENPANEL_BARFILLPEN_TXT,
  167.                         GTPA_Depth,            Depth,
  168.                         LAPA_SmallPalette,    TRUE,
  169.                         LA_UWORD,            &PrivateArray[BARBLOCKPEN],
  170.                         LA_ID,                100 + BARBLOCKPEN,
  171.                     TAG_DONE);
  172.  
  173.                     LT_New(Handle,
  174.                         LA_Type,            PALETTE_KIND,
  175.                         LA_LabelID,            MSG_PENPANEL_BARTEXTPEN_TXT,
  176.                         GTPA_Depth,            Depth,
  177.                         LAPA_SmallPalette,    TRUE,
  178.                         LA_UWORD,            &PrivateArray[BARDETAILPEN],
  179.                         LA_ID,                100 + BARDETAILPEN,
  180.                     TAG_DONE);
  181.  
  182.                     LT_EndGroup(Handle);
  183.                 }
  184.  
  185.                 LT_New(Handle,
  186.                     LA_Type,XBAR_KIND,
  187.                 TAG_DONE);
  188.  
  189.                 LT_New(Handle,
  190.                     LA_Type,    VERTICAL_KIND,
  191.                 TAG_DONE);
  192.                 {
  193.                     LT_New(Handle,
  194.                         LA_Type,        BUTTON_KIND,
  195.                         LA_LabelID,        MSG_PENPANEL_STANDARDPENS_TXT,
  196.                         LA_ID,            GAD_DEFAULT,
  197.                         LABT_ExtraFat,    TRUE,
  198.                     TAG_DONE);
  199.  
  200.                     LT_EndGroup(Handle);
  201.                 }
  202.  
  203.                 LT_EndGroup(Handle);
  204.             }
  205.  
  206.             LT_New(Handle,
  207.                 LA_Type,VERTICAL_KIND,
  208.             TAG_DONE);
  209.             {
  210.                 LT_New(Handle,
  211.                     LA_Type,        XBAR_KIND,
  212.                     LAXB_FullSize,    TRUE,
  213.                 TAG_DONE);
  214.  
  215.                 LT_EndGroup(Handle);
  216.             }
  217.  
  218.             LT_New(Handle,LA_Type,HORIZONTAL_KIND,
  219.                 LAGR_SameSize,    TRUE,
  220.                 LAGR_Spread,    TRUE,
  221.             TAG_DONE);
  222.             {
  223.                 LT_New(Handle,
  224.                     LA_Type,        BUTTON_KIND,
  225.                     LA_LabelID,        MSG_GLOBAL_USE_GAD,
  226.                     LA_ID,            GAD_USE,
  227.                     LABT_ReturnKey,    TRUE,
  228.                     LABT_ExtraFat,    TRUE,
  229.                 TAG_DONE);
  230.  
  231.                 LT_New(Handle,
  232.                     LA_Type,        BUTTON_KIND,
  233.                     LA_LabelID,        MSG_GLOBAL_CANCEL_GAD,
  234.                     LA_ID,            GAD_CANCEL,
  235.                     LABT_EscKey,    TRUE,
  236.                     LABT_ExtraFat,    TRUE,
  237.                 TAG_DONE);
  238.  
  239.                 LT_EndGroup(Handle);
  240.             }
  241.  
  242.             LT_EndGroup(Handle);
  243.         }
  244.  
  245.         if(PanelWindow = LT_Build(Handle,
  246.             LAWN_TitleID,        MSG_PENPANEL_SCREEN_DRAWING_PENS_TXT,
  247.             LAWN_HelpHook,        &GuideHook,
  248.             LAWN_Parent,        Window,
  249.             WA_DepthGadget,        TRUE,
  250.             WA_DragBar,            TRUE,
  251.             WA_RMBTrap,            TRUE,
  252.             WA_Activate,        TRUE,
  253.             WA_SimpleRefresh,    TRUE,
  254.         TAG_DONE))
  255.         {
  256.             struct IntuiMessage    *Message;
  257.             struct Gadget *MsgGadget;
  258.             ULONG MsgClass;
  259.             BOOL Done;
  260.             LONG i;
  261.  
  262.             PushWindow(PanelWindow);
  263.  
  264.             LT_ShowWindow(Handle,TRUE);
  265.  
  266.             GuideContext(CONTEXT_SCREEN);
  267.  
  268.             Done = FALSE;
  269.  
  270.             do
  271.             {
  272.                 if(Wait(PORTMASK(PanelWindow->UserPort) | SIG_BREAK) & SIG_BREAK)
  273.                     break;
  274.  
  275.                 while(Message = (struct IntuiMessage *)LT_GetIMsg(Handle))
  276.                 {
  277.                     MsgClass    = Message->Class;
  278.                     MsgGadget    = (struct Gadget *)Message->IAddress;
  279.  
  280.                     LT_ReplyIMsg(Message);
  281.  
  282.                     if(MsgClass == IDCMP_GADGETUP)
  283.                     {
  284.                         switch(MsgGadget->GadgetID)
  285.                         {
  286.                             case GAD_USE:
  287.  
  288.                                 CopyMem(PrivateArray,Array,sizeof(PrivateArray));
  289.  
  290.                                 Array[DETAILPEN]    = PrivateArray[BACKGROUNDPEN];
  291.                                 Array[BLOCKPEN]        = PrivateArray[SHADOWPEN];
  292.                                 Array[BARTRIMPEN]    = PrivateArray[BARDETAILPEN];
  293.  
  294.                                 Result = Done = TRUE;
  295.                                 break;
  296.  
  297.                             case GAD_CANCEL:
  298.  
  299.                                 Done = TRUE;
  300.                                 break;
  301.  
  302.                             case GAD_DEFAULT:
  303.  
  304.                                 for(i = TEXTPEN ; i <= BARBLOCKPEN ; i++)
  305.                                     LT_SetAttributes(Handle,100 + i,GTPA_Color,DefaultArray[i],TAG_DONE);
  306.  
  307.                                 break;
  308.                         }
  309.                     }
  310.                 }
  311.             }
  312.             while(!Done);
  313.  
  314.             PopWindow();
  315.         }
  316.  
  317.         LT_DeleteHandle(Handle);
  318.     }
  319.  
  320.     return(Result);
  321. }
  322.  
  323. BOOL
  324. ScreenPanel(struct Window *Parent,struct Configuration *LocalConfig)
  325. {
  326.     STATIC LONG PageTitleID[6] =
  327.     {
  328.         MSG_V36_0163,
  329.         MSG_V36_0164,
  330.         MSG_V36_0165,
  331.         MSG_V36_0166,
  332.         MSG_PENPANEL_DRAWING_PENS_TXT,
  333.         -1
  334.     };
  335.  
  336.     STATIC BYTE InitialPage = 0;
  337.  
  338.     LayoutHandle *Handle;
  339.     STRPTR PageTitle[6];
  340.     BOOL UseIt;
  341.  
  342.     UseIt = FALSE;
  343.  
  344.     LocalizeStringTable(PageTitle,PageTitleID);
  345.  
  346.         /* Make a backup of the current settings. We will modify only */
  347.         /* the backup */
  348.  
  349.     SaveConfig(LocalConfig,PrivateConfig);
  350.  
  351.         /* If the settings aren't yet patched up for 96 bit mode, */
  352.         /* do it now. */
  353.  
  354.     if(!PrivateConfig->ScreenConfig->UseColours96)
  355.     {
  356.         Colour12x96(PrivateConfig->ScreenConfig->Colours,PrivateConfig->ScreenConfig->Colours96,16);
  357.  
  358.         PrivateConfig->ScreenConfig->UseColours96 = TRUE;
  359.     }
  360.  
  361.     if(Handle = LT_CreateHandleTags(Parent->WScreen,
  362.         LAHN_LocaleHook,    &LocaleHook,
  363.         LAHN_ExactClone,    TRUE,
  364.         LAHN_ExitFlush,        FALSE,
  365.     TAG_DONE))
  366.     {
  367.         UBYTE ModeName[DISPLAYNAMELEN + 1],FontName[MAX_FILENAME_LENGTH];
  368.         struct Window *LocalWindow;
  369.         ULONG DisplayMode;
  370.         BOOL FixedColours;
  371.  
  372.         FixedColours = CannotChangeColours(PrivateConfig,LocalConfig->ScreenConfig->ColourMode);
  373.  
  374.             /* Get the desired screen display mode */
  375.  
  376.         DisplayMode = PrivateConfig->ScreenConfig->DisplayMode;
  377.  
  378.             /* Is the requested screen display mode available on this machine? */
  379.  
  380.         if(ModeNotAvailable(DisplayMode))
  381.         {
  382.             struct Screen *PubScreen = LockPubScreen(NULL);
  383.  
  384.                 /* Lock the default public screen */
  385.  
  386.             if(PubScreen)
  387.             {
  388.                 struct DimensionInfo DimensionInfo;
  389.  
  390.                     /* Use the default display mode */
  391.  
  392.                 DisplayMode = GetVPModeID(&PubScreen->ViewPort);
  393.  
  394.                     /* Get the default screen size for this display mode */
  395.  
  396.                 if(GetDisplayInfoData(NULL,(APTR)&DimensionInfo,sizeof(struct DimensionInfo),DTAG_DIMS,DisplayMode))
  397.                 {
  398.                     LONG Width,Height;
  399.  
  400.                     Width    = DimensionInfo.TxtOScan.MaxX - DimensionInfo.TxtOScan.MinX + 1;
  401.                     Height    = DimensionInfo.TxtOScan.MaxY - DimensionInfo.TxtOScan.MinY + 1;
  402.  
  403.                         /* If the screen is set to a specific size, override */
  404.                         /* these settings with defaults. */
  405.  
  406.                     if(Width != PrivateConfig->ScreenConfig->DisplayWidth && PrivateConfig->ScreenConfig->DisplayWidth > 0)
  407.                         PrivateConfig->ScreenConfig->DisplayWidth = Width;
  408.  
  409.                     if(Height != PrivateConfig->ScreenConfig->DisplayHeight && PrivateConfig->ScreenConfig->DisplayHeight > 0)
  410.                         PrivateConfig->ScreenConfig->DisplayHeight = Height;
  411.                 }
  412.  
  413.                 UnlockPubScreen(NULL,PubScreen);
  414.             }
  415.             else
  416.                 DisplayMode = DEFAULT_MONITOR_ID | HIRES_KEY;    /* Catch all... */
  417.         }
  418.  
  419.             /* The name of the display mode chosen */
  420.  
  421.         GetModeName(DisplayMode,ModeName,sizeof(ModeName));
  422.  
  423.         BuildFontName(FontName,sizeof(FontName),PrivateConfig->ScreenConfig->FontName,PrivateConfig->ScreenConfig->FontHeight);
  424.  
  425.             /* If we cannot change the colours, or would */
  426.             /* display the wrong colours when choosing the */
  427.             /* rendering pens, don't display the last */
  428.             /* two pages */
  429.  
  430.         if(FixedColours)
  431.         {
  432.             if(InitialPage > 2)
  433.                 InitialPage = 2;
  434.  
  435.             PageTitle[3] = NULL;
  436.         }
  437.  
  438.         if(!Kick30)
  439.         {
  440.             if(InitialPage > 3)
  441.                 InitialPage = 3;
  442.  
  443.             PageTitle[4] = NULL;
  444.         }
  445.  
  446.         LT_New(Handle,
  447.             LA_Type,    VERTICAL_KIND,
  448.         TAG_DONE);
  449.         {
  450.             LT_New(Handle,
  451.                 LA_Type,VERTICAL_KIND,
  452.             TAG_DONE);
  453.             {
  454.                 LT_New(Handle,
  455.                     LA_Type,        TAB_KIND,
  456.                     LA_ID,            GAD_PAGER,
  457.                     LA_LabelID,        MSG_XFER_PAGE_TXT,
  458.                     GTCY_Labels,    PageTitle,
  459.                     LACY_AutoPageID,GAD_PAGEGROUP,
  460.                     LACY_TabKey,    TRUE,
  461.                     LA_BYTE,        &InitialPage,
  462.                     LATB_FullWidth,    TRUE,
  463.                 TAG_DONE);
  464.  
  465.                 LT_EndGroup(Handle);
  466.             }
  467.  
  468.             LT_New(Handle,
  469.                 LA_Type,        VERTICAL_KIND,
  470.                 LA_ID,            GAD_PAGEGROUP,
  471.                 LAGR_ActivePage,InitialPage,
  472.             TAG_DONE);
  473.             {
  474.                 LT_New(Handle,
  475.                     LA_Type,    VERTICAL_KIND,
  476.                 TAG_DONE);
  477.                 {
  478.                     LT_New(Handle,
  479.                         LA_Type,    VERTICAL_KIND,
  480.                     TAG_DONE);
  481.                     {
  482.                         LT_New(Handle,
  483.                             LA_Type,        TEXT_KIND,
  484.                             LA_LabelID,        MSG_SCREENPANEL_CURRENT_DISPLAY_MODE_GAD,
  485.                             LA_Chars,        DISPLAYNAMELEN,
  486.                             LA_ID,            GAD_SCREENMODE,
  487.                             GTTX_Text,        ModeName,
  488.                             GTTX_Border,    TRUE,
  489.                             LATX_Picker,    TRUE,
  490.                             LATX_LockSize,    TRUE,
  491.                         TAG_DONE);
  492.  
  493.                         LT_New(Handle,
  494.                             LA_Type,        TEXT_KIND,
  495.                             LA_LabelID,        MSG_SCREENPANEL_SCREEN_FONT_GAD,
  496.                             LA_ID,            GAD_FONT,
  497.                             LA_Chars,        DISPLAYNAMELEN,
  498.                             GTTX_Text,        FontName,
  499.                             GTTX_Border,    TRUE,
  500.                             LATX_Picker,    TRUE,
  501.                             LATX_LockSize,    TRUE,
  502.                         TAG_DONE);
  503.  
  504.                         LT_EndGroup(Handle);
  505.                     }
  506.  
  507.                     LT_New(Handle,
  508.                         LA_Type,    VERTICAL_KIND,
  509.                     TAG_DONE);
  510.                     {
  511.                         LT_New(Handle,
  512.                             LA_Type,        CHECKBOX_KIND,
  513.                             LA_LabelID,        MSG_SCREENPANEL_MAKE_SCREEN_PUBLIC_GAD,
  514.                             LA_BYTE,        &PrivateConfig->ScreenConfig->MakeScreenPublic,
  515.                             LA_ID,            GAD_MAKESCREENPUBLIC,
  516.                             GA_Disabled,    PrivateConfig->ScreenConfig->UseWorkbench,
  517.                         TAG_DONE);
  518.  
  519.                         LT_EndGroup(Handle);
  520.                     }
  521.  
  522.                     LT_New(Handle,
  523.                         LA_Type,    VERTICAL_KIND,
  524.                     TAG_DONE);
  525.                     {
  526.                         LT_New(Handle,
  527.                             LA_Type,    XBAR_KIND,
  528.                         TAG_DONE);
  529.  
  530.                         LT_New(Handle,
  531.                             LA_Type,    CHECKBOX_KIND,
  532.                             LA_ID,        GAD_USE_PUBSCREEN,
  533.                             LA_LabelID,    MSG_SCREENPANEL_USE_WORKBENCH_GAD,
  534.                             LA_BYTE,    &PrivateConfig->ScreenConfig->UseWorkbench,
  535.                         TAG_DONE);
  536.  
  537.                         LT_EndGroup(Handle);
  538.                     }
  539.  
  540.                     LT_New(Handle,
  541.                         LA_Type,    VERTICAL_KIND,
  542.                     TAG_DONE);
  543.                     {
  544.                         LT_New(Handle,
  545.                             LA_Type,        STRING_KIND,
  546.                             LA_LabelID,        MSG_SCREENPANEL_PUBSCREEN_NAME_GAD,
  547.                             LA_ID,            GAD_PUBSCREENNAME,
  548.                             LA_STRPTR,        PrivateConfig->ScreenConfig->PubScreenName,
  549.                             LA_Chars,        14,
  550.                             GTST_MaxChars,    sizeof(PrivateConfig->ScreenConfig->PubScreenName) - 1,
  551.                             LAST_Picker,    TRUE,
  552.                             GA_Disabled,    !PrivateConfig->ScreenConfig->UseWorkbench,
  553.                         TAG_DONE);
  554.  
  555.                         LT_EndGroup(Handle);
  556.                     }
  557.  
  558.                     LT_EndGroup(Handle);
  559.                 }
  560.  
  561.                 LT_New(Handle,
  562.                     LA_Type,    VERTICAL_KIND,
  563.                 TAG_DONE);
  564.                 {
  565.                     LT_New(Handle,
  566.                         LA_Type,    VERTICAL_KIND,
  567.                     TAG_DONE);
  568.                     {
  569.                         LT_New(Handle,
  570.                             LA_Type,        CHECKBOX_KIND,
  571.                             LA_LabelID,        MSG_SCREENPANEL_SCREEN_TITLE_GAD,
  572.                             LA_BYTE,        &PrivateConfig->ScreenConfig->TitleBar,
  573.                             LA_ID,            GAD_SCREENTITLE,
  574.                             GA_Disabled,    PrivateConfig->ScreenConfig->UseWorkbench,
  575.                         TAG_DONE);
  576.  
  577.                         LT_New(Handle,
  578.                             LA_Type,        CHECKBOX_KIND,
  579.                             LA_LabelID,        MSG_SCREENPANEL_WINDOW_BORDER_TXT,
  580.                             LA_BYTE,        &PrivateConfig->ScreenConfig->ShareScreen,
  581.                             LA_ID,            GAD_WINDOW_BORDER,
  582.                             GA_Disabled,    PrivateConfig->ScreenConfig->UseWorkbench,
  583.                         TAG_DONE);
  584.  
  585.                         LT_New(Handle,
  586.                             LA_Type,        CHECKBOX_KIND,
  587.                             LA_LabelID,        MSG_SCREENPANEL_USE_SIMPLE_REFRESH_GAD,
  588.                             LA_BYTE,        &PrivateConfig->ScreenConfig->UseSimpleRefresh,
  589.                             LA_ID,            GAD_SIMPLE_REFRESH,
  590.                         TAG_DONE);
  591.  
  592.                         LT_New(Handle,
  593.                             LA_Type,        XBAR_KIND,
  594.                         TAG_DONE);
  595.  
  596.                             /* Make up for an ancient, truly stupid idea. This
  597.                              * used to be a bit field.
  598.                              */
  599.  
  600.                         PrivateConfig->ScreenConfig->StatusLine &= 0xF;
  601.  
  602.                         LT_New(Handle,
  603.                             LA_Type,        CHECKBOX_KIND,
  604.                             LA_LabelID,        MSG_SCREENPANEL_SEPARATE_STATUS_WINDOW_TXT,
  605.                             LA_BYTE,        &PrivateConfig->ScreenConfig->SplitStatus,
  606.                             LA_ID,            GAD_SPLIT_STATUS,
  607.                             GA_Disabled,    !PrivateConfig->ScreenConfig->StatusLine || (!PrivateConfig->ScreenConfig->ShareScreen && !PrivateConfig->ScreenConfig->UseWorkbench),
  608.                         TAG_DONE);
  609.  
  610.                         LT_EndGroup(Handle);
  611.                     }
  612.  
  613.                     LT_New(Handle,
  614.                         LA_Type,    VERTICAL_KIND,
  615.                     TAG_DONE);
  616.                     {
  617.                         LT_New(Handle,
  618.                             LA_Type,        CYCLE_KIND,
  619.                             LA_LabelID,        MSG_SCREENPANEL_STATUS_LINE_GAD,
  620.                             LA_BYTE,        &PrivateConfig->ScreenConfig->StatusLine,
  621.                             LACY_FirstLabel,MSG_SCREENPANEL_STATUS_DISABLED_TXT,
  622.                             LACY_LastLabel,    MSG_SCREENPANEL_STATUS_COMPACT_TXT,
  623.                             LA_ID,            GAD_STATUS_LINE,
  624.                         TAG_DONE);
  625.  
  626.                         LT_New(Handle,
  627.                             LA_Type,        CYCLE_KIND,
  628.                             LA_LabelID,        MSG_SCREENPANEL_ONLINE_TIME_GAD,
  629.                             LA_BYTE,        &PrivateConfig->ScreenConfig->TimeMode,
  630.                             LACY_FirstLabel,MSG_SCREENPANEL_TIME_ONLINETIME_TXT,
  631.                             LACY_LastLabel,    MSG_SCREENPANEL_TIME_BOTH_TXT,
  632.                         TAG_DONE);
  633.  
  634.                         LT_EndGroup(Handle);
  635.                     }
  636.  
  637.                     LT_EndGroup(Handle);
  638.                 }
  639.  
  640.                 LT_New(Handle,
  641.                     LA_Type,    VERTICAL_KIND,
  642.                 TAG_DONE);
  643.                 {
  644.                     LT_New(Handle,
  645.                         LA_Type,        MX_KIND,
  646.                         LA_LabelID,        MSG_SCREENPANEL_COLOUR_GAD,
  647.                         LA_WORD,        &PrivateConfig->ScreenConfig->ColourMode,
  648.                         LA_ID,            GAD_COLOURMODE,
  649.                         LAMX_FirstLabel,MSG_SCREENPANEL_COLOUR_AMIGA_TXT,
  650.                         LAMX_LastLabel,    MSG_SCREENPANEL_COLOUR_MONO_TXT,
  651.                     TAG_DONE);
  652.  
  653.                     LT_New(Handle,
  654.                         LA_Type,        CHECKBOX_KIND,
  655.                         LA_LabelID,        MSG_SCREENPANEL_BLINKING_GAD,
  656.                         LA_ID,            GAD_BLINKING,
  657.                         LA_BYTE,        &PrivateConfig->ScreenConfig->Blinking,
  658.                         GA_Disabled,    PrivateConfig->ScreenConfig->ColourMode == COLOUR_MONO,
  659.                         LA_ExtraSpace,    TRUE,
  660.                     TAG_DONE);
  661.  
  662.                     LT_EndGroup(Handle);
  663.                 }
  664.  
  665.                 if(!FixedColours)
  666.                 {
  667.                     LT_New(Handle,
  668.                         LA_Type,    VERTICAL_KIND,
  669.                     TAG_DONE);
  670.                     {
  671.                         LONG Depth;
  672.  
  673.                         switch(PrivateConfig->ScreenConfig->ColourMode)
  674.                         {
  675.                             case COLOUR_MONO:
  676.  
  677.                                 Depth = 1;
  678.                                 break;
  679.  
  680.                             case COLOUR_AMIGA:
  681.  
  682.                                 Depth = 2;
  683.                                 break;
  684.  
  685.                             case COLOUR_EIGHT:
  686.  
  687.                                 Depth = 3;
  688.                                 break;
  689.  
  690.                             case COLOUR_SIXTEEN:
  691.  
  692.                                 Depth = 4;
  693.                                 break;
  694.                         }
  695.  
  696.                         if(PrivateConfig->ScreenConfig->UseWorkbench)
  697.                         {
  698.                             LONG i,MaxDepth = 4;
  699.  
  700.                             for(i = 0 ; i < 4 ; i++)
  701.                             {
  702.                                 if((1L << i) > Window->WScreen->ViewPort.ColorMap->Count)
  703.                                 {
  704.                                     MaxDepth = i;
  705.  
  706.                                     break;
  707.                                 }
  708.                             }
  709.  
  710.                             if(Depth > MaxDepth)
  711.                                 Depth = MaxDepth;
  712.                         }
  713.  
  714.                         LT_New(Handle,
  715.                             LA_Type,    VERTICAL_KIND,
  716.                         TAG_DONE);
  717.                         {
  718.                             STRPTR ColourFormat;
  719.                             LONG ColourMax;
  720.  
  721.                             if(Kick30)
  722.                             {
  723.                                 ColourMax        = 255;
  724.                                 ColourFormat    = "%3ld";
  725.                             }
  726.                             else
  727.                             {
  728.                                 ColourMax        = 15;
  729.                                 ColourFormat    = "%2ld";
  730.                             }
  731.  
  732.                             LT_New(Handle,
  733.                                 LA_Type,            PALETTE_KIND,
  734.                                 LA_LabelID,            MSG_SCREENPANEL_EDIT_SCREEN_PALETTE_GAD,
  735.                                 LA_ID,                GAD_PALETTE,
  736.                                 LA_Chars,            12,
  737.                                 GTPA_Depth,            Depth,
  738.                             TAG_DONE);
  739.  
  740.                             LT_New(Handle,
  741.                                 LA_Type,            SliderType,
  742.                                 LA_LabelID,            MSG_SCREENPANEL_RED_GAD,
  743.                                 LA_ID,                GAD_RED,
  744.                                 GTSL_Min,            0,
  745.                                 GTSL_Max,            ColourMax,
  746.                                 GTSL_Level,            0,
  747.                                 GTSL_LevelFormat,    ColourFormat,
  748.                             TAG_DONE);
  749.  
  750.                             LT_New(Handle,
  751.                                 LA_Type,            SliderType,
  752.                                 LA_LabelID,            MSG_SCREENPANEL_GREEN_GAD,
  753.                                 LA_ID,                GAD_GREEN,
  754.                                 GTSL_Min,            0,
  755.                                 GTSL_Max,            ColourMax,
  756.                                 GTSL_Level,            0,
  757.                                 GTSL_LevelFormat,    ColourFormat,
  758.                             TAG_DONE);
  759.  
  760.                             LT_New(Handle,
  761.                                 LA_Type,            SliderType,
  762.                                 LA_LabelID,            MSG_SCREENPANEL_BLUE_GAD,
  763.                                 LA_ID,                GAD_BLUE,
  764.                                 GTSL_Min,            0,
  765.                                 GTSL_Max,            ColourMax,
  766.                                 GTSL_Level,            0,
  767.                                 GTSL_LevelFormat,    ColourFormat,
  768.                             TAG_DONE);
  769.  
  770.                             LT_New(Handle,
  771.                                 LA_Type,            XBAR_KIND,
  772.                             TAG_DONE);
  773.  
  774.                             LT_EndGroup(Handle);
  775.                         }
  776.  
  777.                         LT_New(Handle,
  778.                             LA_Type,    VERTICAL_KIND,
  779.                         TAG_DONE);
  780.                         {
  781.                             LT_New(Handle,
  782.                                 LA_Type,    BUTTON_KIND,
  783.                                 LA_LabelID,    MSG_SCREENPANEL_USE_DEFAULT_TXT,
  784.                                 LA_ID,        GAD_RESET,
  785.                                 LA_Chars,    16,
  786.                             TAG_DONE);
  787.  
  788.                             LT_EndGroup(Handle);
  789.                         }
  790.  
  791.                         LT_EndGroup(Handle);
  792.                     }
  793.  
  794.                     if(Kick30)
  795.                     {
  796.                         LT_New(Handle,
  797.                             LA_Type,    VERTICAL_KIND,
  798.                         TAG_DONE);
  799.                         {
  800.                             LT_New(Handle,
  801.                                 LA_Type,    VERTICAL_KIND,
  802.                             TAG_DONE);
  803.                             {
  804.                                 LT_New(Handle,
  805.                                     LA_Type,        CHECKBOX_KIND,
  806.                                     LA_LabelID,        MSG_PENPANEL_STANDARDPENS_TXT,
  807.                                     LA_ID,            GAD_STDPENS,
  808.                                     LA_BYTE,        &PrivateConfig->ScreenConfig->UsePens,
  809.                                     GA_Disabled,    PrivateConfig->ScreenConfig->UseWorkbench,
  810.                                 TAG_DONE);
  811.  
  812.                                 LT_EndGroup(Handle);
  813.                             }
  814.  
  815.                             LT_New(Handle,
  816.                                 LA_Type,    VERTICAL_KIND,
  817.                             TAG_DONE);
  818.                             {
  819.                                 LT_New(Handle,
  820.                                     LA_Type,        BUTTON_KIND,
  821.                                     LA_LabelID,        MSG_PENPANEL_EDITPENS_TXT,
  822.                                     LA_ID,            GAD_EDITPENS,
  823.                                     GA_Disabled,    PrivateConfig->ScreenConfig->UsePens || PrivateConfig->ScreenConfig->UseWorkbench,
  824.                                 TAG_DONE);
  825.  
  826.                                 LT_EndGroup(Handle);
  827.                             }
  828.  
  829.                             LT_EndGroup(Handle);
  830.                         }
  831.                     }
  832.                 }
  833.  
  834.                 LT_EndGroup(Handle);
  835.             }
  836.  
  837.             LT_New(Handle,
  838.                 LA_Type,    VERTICAL_KIND,
  839.             TAG_DONE);
  840.             {
  841.                 LT_New(Handle,
  842.                     LA_Type,        XBAR_KIND,
  843.                     LAXB_FullSize,    TRUE,
  844.                 TAG_DONE);
  845.  
  846.                 LT_EndGroup(Handle);
  847.             }
  848.  
  849.             LT_New(Handle,LA_Type,HORIZONTAL_KIND,
  850.                 LAGR_SameSize,    TRUE,
  851.                 LAGR_Spread,    TRUE,
  852.             TAG_DONE);
  853.             {
  854.                 LT_New(Handle,
  855.                     LA_Type,        BUTTON_KIND,
  856.                     LA_LabelID,        MSG_GLOBAL_USE_GAD,
  857.                     LA_ID,            GAD_USE,
  858.                     LABT_ReturnKey,    TRUE,
  859.                     LABT_ExtraFat,    TRUE,
  860.                 TAG_DONE);
  861.  
  862.                 LT_New(Handle,
  863.                     LA_Type,        BUTTON_KIND,
  864.                     LA_LabelID,        MSG_GLOBAL_CANCEL_GAD,
  865.                     LA_ID,            GAD_CANCEL,
  866.                     LABT_EscKey,    TRUE,
  867.                     LABT_ExtraFat,    TRUE,
  868.                 TAG_DONE);
  869.  
  870.                 LT_EndGroup(Handle);
  871.             }
  872.  
  873.             LT_EndGroup(Handle);
  874.         }
  875.  
  876.         if(LocalWindow = LT_Build(Handle,
  877.             LAWN_TitleID,        MSG_SCREENPANEL_SCREEN_PREFERENCES_TXT,
  878.             LAWN_HelpHook,        &GuideHook,
  879.             LAWN_Parent,        Parent,
  880.             WA_DepthGadget,        TRUE,
  881.             WA_DragBar,            TRUE,
  882.             WA_RMBTrap,            TRUE,
  883.             WA_Activate,        TRUE,
  884.             WA_SimpleRefresh,    TRUE,
  885.         TAG_DONE))
  886.         {
  887.             struct IntuiMessage    *Message;
  888.             struct ViewPort *LocalVPort;
  889.             LONG ColourNumber,Count,i;
  890.             struct Gadget *MsgGadget;
  891.             WORD Red,Green,Blue;
  892.             UWORD *DefaultPens;
  893.             ULONG MsgClass;
  894.             UWORD MsgCode;
  895.             LONG Depth;
  896.             BOOL Done;
  897.  
  898.             ColourNumber = 0;
  899.             LocalVPort = &LocalWindow->WScreen->ViewPort;
  900.  
  901.             switch(PrivateConfig->ScreenConfig->ColourMode)
  902.             {
  903.                 case COLOUR_MONO:
  904.  
  905.                     DefaultPens = MonoPens;
  906.                     Depth = 1;
  907.                     break;
  908.  
  909.                 case COLOUR_AMIGA:
  910.  
  911.                     DefaultPens = StandardPens;
  912.                     Depth = 2;
  913.                     break;
  914.  
  915.                 case COLOUR_EIGHT:
  916.  
  917.                     DefaultPens = ANSIPens;
  918.                     Depth = 3;
  919.                     break;
  920.  
  921.                 case COLOUR_SIXTEEN:
  922.  
  923.                     if(Kick30)
  924.                         DefaultPens = NewEGAPens;
  925.                     else
  926.                         DefaultPens = EGAPens;
  927.  
  928.                     Depth = 4;
  929.                     break;
  930.             }
  931.  
  932.             for(Count = 0, i = DETAILPEN ; i <= BARTRIMPEN ; i++)
  933.             {
  934.                 if(PrivateConfig->ScreenConfig->PenArray[i])
  935.                     Count++;
  936.             }
  937.  
  938.             if(!Count)
  939.                 CopyMem(DefaultPens,PrivateConfig->ScreenConfig->PenArray,16 * sizeof(UWORD));
  940.  
  941.             PrivateConfig->ScreenConfig->DisplayMode = DisplayMode;
  942.  
  943.             if(!FixedColours)
  944.             {
  945.                 if(Kick30)
  946.                 {
  947.                     Red        = PrivateConfig->ScreenConfig->Colours96[ColourNumber * 3 + 0] >> 24;
  948.                     Green    = PrivateConfig->ScreenConfig->Colours96[ColourNumber * 3 + 1] >> 24;
  949.                     Blue    = PrivateConfig->ScreenConfig->Colours96[ColourNumber * 3 + 2] >> 24;
  950.                 }
  951.                 else
  952.                 {
  953.                     Red        = (PrivateConfig->ScreenConfig->Colours[ColourNumber] >> 8) & 0xF;
  954.                     Green    = (PrivateConfig->ScreenConfig->Colours[ColourNumber] >> 4) & 0xF;
  955.                     Blue    = (PrivateConfig->ScreenConfig->Colours[ColourNumber]     ) & 0xF;
  956.                 }
  957.  
  958.                 LT_SetAttributes(Handle,GAD_RED,    GTSL_Level,    Red,    TAG_DONE);
  959.                 LT_SetAttributes(Handle,GAD_GREEN,    GTSL_Level,    Green,    TAG_DONE);
  960.                 LT_SetAttributes(Handle,GAD_BLUE,    GTSL_Level,    Blue,    TAG_DONE);
  961.  
  962.                 PaletteSetup(PrivateConfig);
  963.  
  964.                 LoadColourTable(VPort,        NormalColourTable,NormalColours,PaletteSize);
  965.                 LoadColourTable(LocalVPort,    NormalColourTable,NormalColours,PaletteSize);
  966.             }
  967.  
  968.             GuideContext(CONTEXT_SCREEN);
  969.  
  970.             PushWindow(LocalWindow);
  971.  
  972.             LT_ShowWindow(Handle,TRUE);
  973.  
  974.             Done = FALSE;
  975.  
  976.             do
  977.             {
  978.                 if(Wait(PORTMASK(LocalWindow->UserPort) | SIG_BREAK) & SIG_BREAK)
  979.                     break;
  980.  
  981.                 while(Message = (struct IntuiMessage *)LT_GetIMsg(Handle))
  982.                 {
  983.                     MsgClass    = Message->Class;
  984.                     MsgCode        = Message->Code;
  985.                     MsgGadget    = (struct Gadget *)Message->IAddress;
  986.  
  987.                     LT_ReplyIMsg(Message);
  988.  
  989.                     if(MsgClass == IDCMP_GADGETUP || MsgClass == IDCMP_MOUSEMOVE || MsgClass == IDCMP_GADGETDOWN)
  990.                     {
  991.                         switch(MsgGadget->GadgetID)
  992.                         {
  993.                             case GAD_RED:
  994.  
  995.                                 if(Kick30)
  996.                                     Red = MsgCode;
  997.                                 else
  998.                                     Red = (MsgCode << 4) | MsgCode;
  999.  
  1000.                                 PrivateConfig->ScreenConfig->Colours96[ColourNumber * 3 + 0] = SPREAD(Red);
  1001.  
  1002.                                 PaletteSetup(PrivateConfig);
  1003.  
  1004.                                 LoadColourTable(VPort,        NormalColourTable,NormalColours,PaletteSize);
  1005.                                 LoadColourTable(LocalVPort,    NormalColourTable,NormalColours,PaletteSize);
  1006.  
  1007.                                 break;
  1008.  
  1009.                             case GAD_GREEN:
  1010.  
  1011.                                 if(Kick30)
  1012.                                     Green = MsgCode;
  1013.                                 else
  1014.                                     Green = (MsgCode << 4) | MsgCode;
  1015.  
  1016.                                 PrivateConfig->ScreenConfig->Colours96[ColourNumber * 3 + 1] = SPREAD(Green);
  1017.  
  1018.                                 PaletteSetup(PrivateConfig);
  1019.  
  1020.                                 LoadColourTable(VPort,        NormalColourTable,NormalColours,PaletteSize);
  1021.                                 LoadColourTable(LocalVPort,    NormalColourTable,NormalColours,PaletteSize);
  1022.  
  1023.                                 break;
  1024.  
  1025.                             case GAD_BLUE:
  1026.  
  1027.                                 if(Kick30)
  1028.                                     Blue = MsgCode;
  1029.                                 else
  1030.                                     Blue = (MsgCode << 4) | MsgCode;
  1031.  
  1032.                                 PrivateConfig->ScreenConfig->Colours96[ColourNumber * 3 + 2] = SPREAD(Blue);
  1033.  
  1034.                                 PaletteSetup(PrivateConfig);
  1035.  
  1036.                                 LoadColourTable(VPort,        NormalColourTable,NormalColours,PaletteSize);
  1037.                                 LoadColourTable(LocalVPort,    NormalColourTable,NormalColours,PaletteSize);
  1038.  
  1039.                                 break;
  1040.  
  1041.                             case GAD_STDPENS:
  1042.  
  1043.                                 LT_SetAttributes(Handle,GAD_EDITPENS,
  1044.                                     GA_Disabled,PrivateConfig->ScreenConfig->UsePens || PrivateConfig->ScreenConfig->UseWorkbench || FixedColours,
  1045.                                 TAG_DONE);
  1046.  
  1047.                                 break;
  1048.  
  1049.                             case GAD_USE_PUBSCREEN:
  1050.  
  1051.                                 LT_SetAttributes(Handle,GAD_PUBSCREENNAME,        GA_Disabled,!PrivateConfig->ScreenConfig->UseWorkbench,TAG_DONE);
  1052.                                 LT_SetAttributes(Handle,GAD_MAKESCREENPUBLIC,    GA_Disabled,PrivateConfig->ScreenConfig->UseWorkbench,TAG_DONE);
  1053.                                 LT_SetAttributes(Handle,GAD_SCREENTITLE,        GA_Disabled,PrivateConfig->ScreenConfig->UseWorkbench,TAG_DONE);
  1054.                                 LT_SetAttributes(Handle,GAD_WINDOW_BORDER,        GA_Disabled,PrivateConfig->ScreenConfig->UseWorkbench,TAG_DONE);
  1055.                                 LT_SetAttributes(Handle,GAD_BLINKING,            GA_Disabled,PrivateConfig->ScreenConfig->ColourMode == COLOUR_MONO,TAG_DONE);
  1056.                                 LT_SetAttributes(Handle,GAD_SPLIT_STATUS,        GA_Disabled,!PrivateConfig->ScreenConfig->StatusLine || (!PrivateConfig->ScreenConfig->ShareScreen && !PrivateConfig->ScreenConfig->UseWorkbench),TAG_DONE);
  1057.  
  1058.                                 FixedColours = CannotChangeColours(PrivateConfig,LocalConfig->ScreenConfig->ColourMode);
  1059.  
  1060.                                 LT_SetAttributes(Handle,GAD_PALETTE,            GA_Disabled,FixedColours,TAG_DONE);
  1061.                                 LT_SetAttributes(Handle,GAD_RED,                GA_Disabled,FixedColours,TAG_DONE);
  1062.                                 LT_SetAttributes(Handle,GAD_GREEN,                GA_Disabled,FixedColours,TAG_DONE);
  1063.                                 LT_SetAttributes(Handle,GAD_BLUE,                GA_Disabled,FixedColours,TAG_DONE);
  1064.                                 LT_SetAttributes(Handle,GAD_RESET,                GA_Disabled,FixedColours,TAG_DONE);
  1065.  
  1066.                                 LT_SetAttributes(Handle,GAD_EDITPENS,
  1067.                                     GA_Disabled,    PrivateConfig->ScreenConfig->UsePens || PrivateConfig->ScreenConfig->UseWorkbench || FixedColours,
  1068.                                 TAG_DONE);
  1069.  
  1070.                                 LT_SetAttributes(Handle,GAD_STDPENS,
  1071.                                     GTCB_Checked,    PrivateConfig->ScreenConfig->UsePens = TRUE,
  1072.                                     GA_Disabled,    PrivateConfig->ScreenConfig->UseWorkbench || FixedColours,
  1073.                                 TAG_DONE);
  1074.  
  1075.                                 break;
  1076.  
  1077.                             case GAD_WINDOW_BORDER:
  1078.  
  1079.                                 LT_SetAttributes(Handle,GAD_SPLIT_STATUS,GA_Disabled,!PrivateConfig->ScreenConfig->StatusLine || (!PrivateConfig->ScreenConfig->ShareScreen && !PrivateConfig->ScreenConfig->UseWorkbench),TAG_DONE);
  1080.                                 break;
  1081.  
  1082.                             case GAD_COLOURMODE:
  1083.  
  1084.                                 if(!ModeOkay(PrivateConfig->ScreenConfig->DisplayMode) && PrivateConfig->ScreenConfig->ColourMode > COLOUR_AMIGA)
  1085.                                     LT_SetAttributes(Handle,GAD_COLOURMODE,GTCY_Active,COLOUR_AMIGA,TAG_DONE);
  1086.  
  1087.                                 FixedColours = CannotChangeColours(PrivateConfig,LocalConfig->ScreenConfig->ColourMode);
  1088.  
  1089.                                 LT_SetAttributes(Handle,GAD_PALETTE,    GA_Disabled,FixedColours,TAG_DONE);
  1090.                                 LT_SetAttributes(Handle,GAD_RED,        GA_Disabled,FixedColours,TAG_DONE);
  1091.                                 LT_SetAttributes(Handle,GAD_GREEN,        GA_Disabled,FixedColours,TAG_DONE);
  1092.                                 LT_SetAttributes(Handle,GAD_BLUE,        GA_Disabled,FixedColours,TAG_DONE);
  1093.                                 LT_SetAttributes(Handle,GAD_RESET,        GA_Disabled,FixedColours,TAG_DONE);
  1094.                                 LT_SetAttributes(Handle,GAD_BLINKING,    GA_Disabled,PrivateConfig->ScreenConfig->ColourMode == COLOUR_MONO,TAG_DONE);
  1095.  
  1096.                                 switch(PrivateConfig->ScreenConfig->ColourMode)
  1097.                                 {
  1098.                                     case COLOUR_MONO:
  1099.  
  1100.                                         DefaultPens = MonoPens;
  1101.                                         Depth = 1;
  1102.                                         break;
  1103.  
  1104.                                     case COLOUR_AMIGA:
  1105.  
  1106.                                         DefaultPens = StandardPens;
  1107.                                         Depth = 2;
  1108.                                         break;
  1109.  
  1110.                                     case COLOUR_EIGHT:
  1111.  
  1112.                                         DefaultPens = ANSIPens;
  1113.                                         Depth = 3;
  1114.                                         break;
  1115.  
  1116.                                     case COLOUR_SIXTEEN:
  1117.  
  1118.                                         DefaultPens = EGAPens;
  1119.                                         Depth = 4;
  1120.                                         break;
  1121.                                 }
  1122.  
  1123.                                 LT_SetAttributes(Handle,GAD_EDITPENS,
  1124.                                     GA_Disabled,    FixedColours,
  1125.                                 TAG_DONE);
  1126.  
  1127.                                 LT_SetAttributes(Handle,GAD_STDPENS,
  1128.                                     GA_Disabled,    FixedColours,
  1129.                                 TAG_DONE);
  1130.  
  1131.                                 Default2CurrentPalette(PrivateConfig);
  1132.  
  1133.                                 break;
  1134.  
  1135.                             case GAD_EDITPENS:
  1136.  
  1137.                                 LT_LockWindow(LocalWindow);
  1138.  
  1139.                                 if(PrivateConfig->ScreenConfig->PenColourMode != PrivateConfig->ScreenConfig->ColourMode)
  1140.                                 {
  1141.                                     UWORD LocalPens[16];
  1142.  
  1143.                                     CopyMem(DefaultPens,LocalPens,16 * sizeof(UWORD));
  1144.  
  1145.                                     if(ScreenPenPanel(LocalWindow,LocalPens,DefaultPens,Depth))
  1146.                                     {
  1147.                                         CopyMem(LocalPens,PrivateConfig->ScreenConfig->PenArray,16 * sizeof(UWORD));
  1148.  
  1149.                                         PrivateConfig->ScreenConfig->PenColourMode = PrivateConfig->ScreenConfig->ColourMode;
  1150.                                     }
  1151.                                 }
  1152.                                 else
  1153.                                     ScreenPenPanel(LocalWindow,PrivateConfig->ScreenConfig->PenArray,DefaultPens,Depth);
  1154.  
  1155.                                 LT_UnlockWindow(LocalWindow);
  1156.  
  1157.                                 LT_ShowWindow(Handle,TRUE);
  1158.                                 break;
  1159.  
  1160.                             case GAD_PALETTE:
  1161.  
  1162.                                 ColourNumber = MsgCode;
  1163.  
  1164.                                 if(Kick30)
  1165.                                 {
  1166.                                     Red        = PrivateConfig->ScreenConfig->Colours96[ColourNumber * 3 + 0] >> 24;
  1167.                                     Green    = PrivateConfig->ScreenConfig->Colours96[ColourNumber * 3 + 1] >> 24;
  1168.                                     Blue    = PrivateConfig->ScreenConfig->Colours96[ColourNumber * 3 + 2] >> 24;
  1169.                                 }
  1170.                                 else
  1171.                                 {
  1172.                                     Red        = (PrivateConfig->ScreenConfig->Colours[ColourNumber] >> 8) & 0xF;
  1173.                                     Green    = (PrivateConfig->ScreenConfig->Colours[ColourNumber] >> 4) & 0xF;
  1174.                                     Blue    = (PrivateConfig->ScreenConfig->Colours[ColourNumber]     ) & 0xF;
  1175.                                 }
  1176.  
  1177.                                 LT_SetAttributes(Handle,GAD_RED,    GTSL_Level,    Red,    TAG_DONE);
  1178.                                 LT_SetAttributes(Handle,GAD_GREEN,    GTSL_Level,    Green,    TAG_DONE);
  1179.                                 LT_SetAttributes(Handle,GAD_BLUE,    GTSL_Level,    Blue,    TAG_DONE);
  1180.  
  1181.                                 break;
  1182.  
  1183.                             case GAD_RESET:
  1184.  
  1185.                                 Default2CurrentPalette(PrivateConfig);
  1186.  
  1187.                                 if(Kick30)
  1188.                                 {
  1189.                                     Red        = PrivateConfig->ScreenConfig->Colours96[ColourNumber * 3 + 0] >> 24;
  1190.                                     Green    = PrivateConfig->ScreenConfig->Colours96[ColourNumber * 3 + 1] >> 24;
  1191.                                     Blue    = PrivateConfig->ScreenConfig->Colours96[ColourNumber * 3 + 2] >> 24;
  1192.                                 }
  1193.                                 else
  1194.                                 {
  1195.                                     Red        = (PrivateConfig->ScreenConfig->Colours[ColourNumber] >> 8) & 0xF;
  1196.                                     Green    = (PrivateConfig->ScreenConfig->Colours[ColourNumber] >> 4) & 0xF;
  1197.                                     Blue    = (PrivateConfig->ScreenConfig->Colours[ColourNumber]     ) & 0xF;
  1198.                                 }
  1199.  
  1200.                                 LT_SetAttributes(Handle,GAD_RED,    GTSL_Level,    Red,    TAG_DONE);
  1201.                                 LT_SetAttributes(Handle,GAD_GREEN,    GTSL_Level,    Green,    TAG_DONE);
  1202.                                 LT_SetAttributes(Handle,GAD_BLUE,    GTSL_Level,    Blue,    TAG_DONE);
  1203.  
  1204.                                 PaletteSetup(PrivateConfig);
  1205.  
  1206.                                 LoadColourTable(VPort,        NormalColourTable,NormalColours,PaletteSize);
  1207.                                 LoadColourTable(LocalVPort,    NormalColourTable,NormalColours,PaletteSize);
  1208.  
  1209.                                 break;
  1210.  
  1211.                             case GAD_USE:
  1212.  
  1213.                                 LT_UpdateStrings(Handle);
  1214.  
  1215.                                 if(!FixedColours)
  1216.                                     PaletteSetup(PrivateConfig);
  1217.                                 else
  1218.                                 {
  1219.                                     if(PrivateConfig->ScreenConfig->ColourMode != PrivateConfig->ScreenConfig->ColourMode)
  1220.                                         Default2CurrentPalette(PrivateConfig);
  1221.                                 }
  1222.  
  1223.                                 if(PrivateConfig->ScreenConfig->PenColourMode != PrivateConfig->ScreenConfig->ColourMode)
  1224.                                 {
  1225.                                     CopyMem(DefaultPens,PrivateConfig->ScreenConfig->PenArray,16 * sizeof(UWORD));
  1226.  
  1227.                                     PrivateConfig->ScreenConfig->PenColourMode = PrivateConfig->ScreenConfig->ColourMode;
  1228.                                 }
  1229.  
  1230.                                 UseIt = Done = TRUE;
  1231.                                 break;
  1232.  
  1233.                             case GAD_CANCEL:
  1234.  
  1235.                                 Done = TRUE;
  1236.                                 break;
  1237.                         }
  1238.                     }
  1239.  
  1240.                     if(MsgClass == IDCMP_IDCMPUPDATE)
  1241.                     {
  1242.                         switch(MsgGadget->GadgetID)
  1243.                         {
  1244.                             case GAD_FONT:
  1245.  
  1246.                                 if(OpenAnyFont(LocalWindow,PrivateConfig->ScreenConfig->FontName,&PrivateConfig->ScreenConfig->FontHeight))
  1247.                                 {
  1248.                                     BuildFontName(FontName,sizeof(FontName),PrivateConfig->ScreenConfig->FontName,PrivateConfig->ScreenConfig->FontHeight);
  1249.  
  1250.                                     LT_SetAttributes(Handle,GAD_FONT,
  1251.                                         GTTX_Text,    FontName,
  1252.                                     TAG_DONE);
  1253.                                 }
  1254.  
  1255.                                 break;
  1256.  
  1257.                             case GAD_SCREENMODE:
  1258.  
  1259.                                 LT_LockWindow(LocalWindow);
  1260.  
  1261.                                 if(PickDisplayMode(LocalWindow,&PrivateConfig->ScreenConfig->DisplayMode,PrivateConfig))
  1262.                                 {
  1263.                                     GetModeName(PrivateConfig->ScreenConfig->DisplayMode,ModeName,sizeof(ModeName));
  1264.  
  1265.                                     LT_SetAttributes(Handle,GAD_SCREENMODE,GTTX_Text,ModeName,TAG_DONE);
  1266.                                 }
  1267.  
  1268.                                 LT_UnlockWindow(LocalWindow);
  1269.  
  1270.                                 LT_ShowWindow(Handle,TRUE);
  1271.  
  1272.                                 break;
  1273.  
  1274.                             case GAD_STATUS_LINE:
  1275.  
  1276.                                 LT_SetAttributes(Handle,GAD_SPLIT_STATUS,GA_Disabled,!PrivateConfig->ScreenConfig->StatusLine || (!PrivateConfig->ScreenConfig->ShareScreen && !PrivateConfig->ScreenConfig->UseWorkbench),TAG_DONE);
  1277.  
  1278.                                 break;
  1279.  
  1280.                             case GAD_PUBSCREENNAME:
  1281.  
  1282.                                 if(PrivateConfig->ScreenConfig->UseWorkbench)
  1283.                                 {
  1284.                                     UBYTE DummyBuffer[MAXPUBSCREENNAME + 1];
  1285.                                     UBYTE LocalBuffer[256];
  1286.  
  1287.                                     LT_LockWindow(LocalWindow);
  1288.  
  1289.                                     strcpy(DummyBuffer,LT_GetString(Handle,GAD_PUBSCREENNAME));
  1290.                                     strcpy(LocalBuffer,DummyBuffer);
  1291.  
  1292.                                     if(PickScreen(LocalWindow,DummyBuffer))
  1293.                                     {
  1294.                                         if(strcmp(DummyBuffer,LocalBuffer))
  1295.                                             LT_SetAttributes(Handle,GAD_PUBSCREENNAME,GTST_String,DummyBuffer,TAG_DONE);
  1296.                                     }
  1297.  
  1298.                                     LT_UnlockWindow(LocalWindow);
  1299.  
  1300.                                     LT_ShowWindow(Handle,TRUE);
  1301.                                 }
  1302.  
  1303.                                 break;
  1304.                         }
  1305.                     }
  1306.                 }
  1307.             }
  1308.             while(!Done);
  1309.  
  1310.             PopWindow();
  1311.  
  1312.             if(((UseIt && Config != LocalConfig) || (!UseIt && Config == LocalConfig)) && !Config->ScreenConfig->UseWorkbench && Screen)
  1313.             {
  1314.                 PaletteSetup(Config);
  1315.  
  1316.                 LoadColourTable(VPort,        NormalColourTable,NormalColours,PaletteSize);
  1317.                 LoadColourTable(LocalVPort,    NormalColourTable,NormalColours,PaletteSize);
  1318.             }
  1319.         }
  1320.  
  1321.         LT_DeleteHandle(Handle);
  1322.     }
  1323.  
  1324.     if(UseIt)
  1325.         SwapConfig(LocalConfig,PrivateConfig);
  1326.     else
  1327.         SaveConfig(LocalConfig,PrivateConfig);
  1328.  
  1329.     return(UseIt);
  1330. }
  1331.